package com.hailiang.study.javase.java.util;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * @author hailiang.jiang
 * @date 2022年05月10 15:52
 */
public class Collections_sort {


    @Test
    public void test_soft_01() {
        // 构建 Person 对象数组，包含 5 个对象
        List<Person> list = new ArrayList<>();
        list.add(new Person("John", 30));
        list.add(new Person("Mike", 22));
        list.add(new Person("Kim", 34));
        list.add(new Person("Canddy", 25));
        list.add(new Person("Sam", 28));
        // 利用 sort 方法对 Person 进行排序
        /*Collections.sort(list, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                if (o1.age > o2.age){
                    return 1;
                } else if (o1.age < o2.age) {
                    return -1;
                } else {
                    return 0;
                }
            }
        });*/
        Collections.sort(list, (Person o1, Person o2) -> {
            if (o1.age > o2.age){
                return 1;
            } else if (o1.age < o2.age) {
                return -1;
            } else {
                return 0;
            }
        });

        for (Person person : list) {
            System.out.println(person);
        }
    }

    public static class Person {
        private String name; // 人名
        private int age; // 年龄
        public Person(String n, int a) {
            this.name = n;
            this.age = a;
        }
        /** 重写 Object 的 toString() 方法，便于打印对象 */
        @Override
        public String toString() {
            return ("name:" + this.name + ", age:" + this.age).toString();
        }
    }


//    public static class Person implements Comparable<Person> {
//        private String name; // 人名
//        private int age; // 年龄
//        public Person(String n, int a) {
//            this.name = n;
//            this.age = a;
//        }
//        /** 重写 Object 的 toString() 方法，便于打印对象 */
//        @Override
//        public String toString() {
//            return ("name:" + this.name + ", age:" + this.age).toString();
//        }
//
//        /** 重写 Comparable 的 compareTo 方法，表示按照人的年龄来排序 */
//        @Override
//        public int compareTo(Person o) {
//            if (this.age > o.age){
//                return 1;
//            } else if (this.age < o.age) {
//                return -1;
//            } else {
//                return 0;
//            }
//        }
//    }
}
